fps_meter: Add verbose mode to print detailed frame time Sample output: $ fps_meter.py -v trace method: workq [ 1 1 1 ] FPS: 3 23.292, 23.346, 23.393 BUG=chromium:805780 TEST=manually run verbose mode Change-Id: I334bc597af6a0b655dd82460bc2b7667e077f6a3 Reviewed-on: https://chromium-review.googlesource.com/913629 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Vovo Yang <vovoy@chromium.org> Reviewed-by: Cheng-Yu Lee <cylee@google.com> Reviewed-by: Yury Khmel <khmel@google.com>
diff --git a/fps_meter/fps_meter.py b/fps_meter/fps_meter.py index c7ca29a..1e754f8 100755 --- a/fps_meter/fps_meter.py +++ b/fps_meter/fps_meter.py
@@ -24,6 +24,7 @@ ^ 1 : Frame update count detected in this 1/60 sec interval. """ +import argparse import atexit import collections import os @@ -154,17 +155,18 @@ notify_thread.start() -def process_trace_buffer(trace_buffer, end_time): +def process_trace_buffer(trace_buffer, end_time, verbose=False): # Checks all vblanks in the range [end_time - 1.0, end_time]. frame_info = [] step = 1.0 / REFRESH_RATE step_time = end_time - 1.0 + step fps_count = 0 + frame_times = [] for _ in range(REFRESH_RATE): # Checks if there are vblanks in a refresh interval. step_count = 0 while trace_buffer and trace_buffer[0] < step_time: - trace_buffer.popleft() + frame_times.append(trace_buffer.popleft()) step_count += 1 # Each character represent an 1 / REFRESH_RATE interval. @@ -180,9 +182,11 @@ frame_info_str = ''.join(frame_info) print '[%s] FPS: %2d' % (frame_info_str, fps_count) + if frame_times and verbose: + print ', '.join(['%.3f' % t for t in frame_times]) -def main_loop(trace_method): +def main_loop(trace_method, verbose=False): """Main loop to parse the trace. There are 2 threads involved: @@ -226,12 +230,18 @@ m_notify = re_notify.match(line) if m_notify: timestamp = float(m_notify.group(1)) - process_trace_buffer(trace_buffer, timestamp) + process_trace_buffer(trace_buffer, timestamp, verbose) if __name__ == '__main__': + # parsing arguments + parser = argparse.ArgumentParser(description='Print fps infomation.') + parser.add_argument('-v', dest='verbose', action='store_true', + help='print verbose frame time info') + args = parser.parse_args() + trace_method = get_trace_method() print 'trace method:', trace_method enable_tracing(trace_method) - main_loop(trace_method) + main_loop(trace_method, args.verbose)